package com.example.demo.controller; // 定义控制器所在的包

import com.example.demo.common.Result; // 导入统一响应结果类
import com.example.demo.entity.User; // 导入用户实体类
import com.example.demo.service.UserService; // 导入用户服务接口
import org.springframework.beans.factory.annotation.Autowired; // 导入自动注入注解
import org.springframework.web.bind.annotation.*; // 导入Web请求相关注解

import java.util.List; // 导入List集合类

/**
 * 用户管理控制器
 * 处理与用户相关的HTTP请求，提供RESTful API接口
 * 基础路径: /api/users
 */
@RestController // 标识这是一个REST风格的控制器
@RequestMapping("/api/users") // 设置基础请求路径为/api/users
public class UserController { // 用户管理控制器类

    @Autowired // 自动注入UserService实例
    private UserService userService; // 用户服务接口实例

    /**
     * 获取所有用户信息
     * @return Result<List<User>> 包含所有用户信息的列表
     */
    @GetMapping // GET请求映射，获取所有用户信息
    public Result<List<User>> list() { // 查询所有用户信息的方法
        List<User> users = userService.findAll(); // 调用服务层查询所有用户
        return Result.success(users); // 返回成功响应，包含用户列表
    }

    /**
     * 根据ID查询特定用户信息
     * @param id 用户ID
     * @return Result<User> 包含查询到的用户信息
     */
    @GetMapping("/{id}") // GET请求映射，根据ID查询用户
    public Result<User> getById(@PathVariable Long id) { // 根据ID查询用户信息的方法
        User user = userService.findById(id); // 调用服务层查询指定ID的用户
        return user != null ? Result.success(user) : Result.error("用户不存在"); // 返回查询结果，如果用户不存在则返回错误信息
    }

    /**
     * 新增用户信息
     * @param user 要添加的用户信息对象
     * @return Result<Void> 操作结果
     */
    @PostMapping // POST请求映射，新增用户信息
    public Result<Void> save(@RequestBody User user) { // 新增用户信息的方法
        return userService.save(user) ? Result.success() : Result.error("新增用户失败"); // 调用服务层新增用户，根据结果返回成功或失败响应
    }

    /**
     * 更新用户信息
     * @param id 要更新的用户ID
     * @param user 更新后的用户信息对象
     * @return Result<Void> 操作结果
     */
    @PutMapping("/{id}") // PUT请求映射，更新用户信息
    public Result<Void> update(@PathVariable Long id, @RequestBody User user) { // 更新用户信息的方法
        user.setId(id); // 设置要更新的用户ID
        return userService.update(user) ? Result.success() : Result.error("更新用户失败"); // 调用服务层更新用户，根据结果返回成功或失败响应
    }

    /**
     * 删除用户信息
     * @param id 要删除的用户ID
     * @return Result<Void> 操作结果
     */
    @DeleteMapping("/{id}") // DELETE请求映射，删除用户信息
    public Result<Void> delete(@PathVariable Long id) { // 删除用户信息的方法
        return userService.delete(id) ? Result.success() : Result.error("删除用户失败"); // 调用服务层删除用户，根据结果返回成功或失败响应
    }
}